// --------------------------------------------------------------------------------------------------------------------
// <copyright file="IActionLoggingService.cs" company="Scrum for Team System">
//   None
// </copyright>
// <summary>
//   Defines the IActionLoggingService type.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace ScrumForTeamSystem.EventService.Infrastructure.Interfaces
{
    using System;

    /// <summary>
    /// Defines the action logging service interface
    /// </summary>
    public interface IActionLoggingService
    {
        /// <summary>
        /// Gets a value indicating whether this instance has a valid output path.
        /// </summary>
        /// <value>
        /// <c>true</c> if this instance has a valid output path; otherwise, <c>false</c>.
        /// </value>
        bool HasValidOutputPath
        {
            get;
        }

        /// <summary>
        /// Sets the event message.
        /// </summary>
        /// <param name="eventMessage">The event message.</param>
        void LogEventMessage(string eventMessage);

        /// <summary>
        /// Registers the action creator.
        /// </summary>
        /// <param name="eventCreator">The event creator.</param>
        void RegisterLogGenerator(IMessageProducer eventCreator);

        /// <summary>
        /// Adds the exception to event log.
        /// </summary>
        /// <param name="ex">The exception to log.</param>
        void WriteToEventLog(Exception ex);

        /// <summary>
        /// Writes to event log.
        /// </summary>
        /// <param name="message">The message.</param>
        void WriteToEventLog(string message);
    }
}